package com.chisheng.student;

import com.chisheng.common.Page;
import com.chisheng.common.StringUtils;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;

/**
 * 学生操作工具类
 *
 * @author chisheng
 * @since 2021-11-06
 */
public class StudentUtils {

    /**
     * 请求参数的封装。封装成功返回封装后对象，封装失败返回 null
     *
     * @param params 请求参数
     * @return 封装后学生对象
     */
    public static Student populateStudent(Map<String, String[]> params) {
        try {
            Student student = new Student();
            // 必须作转换，原对象不具有修改锁
            HashMap<String, String[]> convertedParams = new HashMap<>(params);
            // 日期作单独处理
            String[] birthdays = convertedParams.remove("birthday");
            if (birthdays != null && birthdays.length > 0) {
                String birthday = birthdays[0];
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                student.setBirthday(format.parse(birthday));
            }

            // 封装其他参数
            BeanUtils.populate(student, convertedParams);
            // 正常封装返回封装数据后对象
            return student;
        } catch (IllegalAccessException | InvocationTargetException | ParseException e) {
            e.printStackTrace();
            // 封装失败返回 null
            return null;
        }
    }

    /**
     * 封装分页查询请求参数，封装成功返回 Page 对象，失败返回 null
     *
     * @param request 请求对象
     * @return 分页参数
     */
    public static Page<Student> populatePage(HttpServletRequest request) {
        String size = request.getParameter("size");
        String current = request.getParameter("current");
        if (StringUtils.isNotEmpty(size) && StringUtils.isNotEmpty(current)) {
            Page<Student> page = new Page<>();
            page.setSize(Integer.parseInt(size));
            page.setCurrent(Integer.parseInt(current));
            return page;
        } else {
            return null;
        }
    }

}
